package operator

import (
	"fmt"
)

//控制台获取输入
func main() {
	switchtest()
}

func input() {
	var name string
	var age int8
	var price float32
	var flag bool
	fmt.Scanln(&name)
	// fmt.Scanln(&age)
	// fmt.Scanln(&price)
	// fmt.Scanln(&flag)
	fmt.Println(name)
	fmt.Scanf("%d %f %t", &age, &price, &flag)
	fmt.Println(age)
	fmt.Println(price)
	fmt.Println(flag)
}
func iftest() {
	//if可以在表达式中赋值使用
	if age := 20; age > 18 {
		fmt.Printf("为%d岁", age)
		fmt.Printf("%T", age)
		fmt.Println()
	}
	var num int8 = 10
	if num < 20 {
		fmt.Print(true)
	} else {
		fmt.Print(false)
	}
}

func switchtest() {
	num := 1
	//case后表达式可以有多个，但不能重复
	//每个case不用加break
	//default不是必须的
	switch num {
	case 1, 2, 3:
		fmt.Println("a")
	case 4:
		fmt.Println("b")
	case 5:
		fmt.Println("C")
	default:
		fmt.Println("default")
	}

	//演示fallthrough穿透，即可以继续执行下个case，而且是没有判断的。【就和java没加break一样】
	switch age := 1; {
	case age == 1:
		fmt.Println(1)
		fallthrough
	case age == 2:
		fmt.Println(2)
		fallthrough
	case age == 3:
		fmt.Println(3)
	default:
		fmt.Println(age)
	}
}

func typetest() {
	//还可以用来判断某个iterface变量中实际指向的变量类型
	var price float32 = 30.1
	var x interface{}
	x = price
	fmt.Printf("%T", x)
	switch x.(type) {
	case nil:
		fmt.Println("null")
	case int:
		fmt.Println("数字")
	case string:
		fmt.Println("字符串")
		//可以是函数
	case func(int) float32:
		fmt.Println("函数")
	case float32:
		fmt.Println("小数")

	}
}
